package leetcode.string;

/**
 * @author wangmaolin1
 * @date 2021/12/12 上午9:29
 */
public class _209长度最小的子数组 {

    /**
     * 滑动窗口
     * 给定一个含有 n 个正整数的数组和一个正整数 target 。
     *
     * 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ，并返回其长度。如果不存在符合条件的子数组，返回 0 。
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode-cn.com/problems/minimum-size-subarray-sum
     * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
     * @param target
     * @param nums
     * @return
     */
    public static int minSubArrayLen(int target, int[] nums) {
        int left = 0;
        int min = nums.length + 1;
        int sum = 0;
        for (int end = 0; end < nums.length; ) {
            sum += nums[end];
            while (sum >= target) {
                int newLen = end - left + 1;
                min = Math.min(newLen, min);
                left++;
                sum -= nums[left - 1];

            }
            end++;
        }
        //可能没有匹配的
        return min == (nums.length + 1) ? 0 : min;

    }

    public static void main(String[] args) {
        System.out.println(minSubArrayLen(7, new int[]{2, 3, 1, 2, 4, 3}));
    }

}
